// 案件类型映射
export const CASE_TYPES = ['民事', '刑事', '行政']

// 案件阶段映射
export const CASE_STAGES = [
  '（民）诉前阶段',
  '（民）一审阶段',
  '（民）二审阶段',
  '（民）再审阶段',
  '（民）执行阶段',
  '（民）一审、二审及执行阶段',
  '（刑）侦察阶段',
  '（刑）审查起诉阶段',
  '（刑）审判阶段',
  '（刑）执行阶段',
  '（行政）起诉与受理',
  '（行政）审理前的准备',
  '（行政）审理阶段',
  '（行政）判决阶段‌',
  '（行政）执行阶段',
  '其他',
]

// 案件状态映射
export const CASE_STATUS = [
  '准备阶段（未提交立案）',
  '起诉阶段（提交立案待受理）',
  '庭前阶段（立案受理未开庭）',
  '审判阶段（已开庭未出判决）',
  '庭后阶段（已判决未生效）',
  '执行阶段（判决生效）',
  '结案',
  '撤诉',
  '终止委托',
]

// 事件类型映射 (与后端保持一致)
export const EVENT_TYPES = [
  '通知',
  '进展',
  '庭审',
  '文书',
  '任务',
  '立案',
  '提交材料',
  '开庭',
  '判决',
  '执行',
  '结案',
  '其他',
]

// 根据索引获取案件类型文本
export function getCaseTypeText(index: number): string {
  return CASE_TYPES[index] || '未知类型'
}

// 根据索引获取案件阶段文本
export function getStageText(index: number): string {
  return CASE_STAGES[index] || '未知阶段'
}

// 根据索引获取案件状态文本
export function getStatusText(index: number): string {
  return CASE_STATUS[index] || '未知状态'
}

// 根据索引或文本获取事件类型文本
// 支持历史数据中直接存储的文字和新的数字类型
export function getEventTypeText(value: number | string): string {
  // 如果是字符串类型
  if (typeof value === 'string') {
    // 检查是否是纯数字字符串
    if (/^\d+$/.test(value)) {
      // 转换为数字处理
      const index = Number(value)
      return EVENT_TYPES[index - 1] || value
    }
    // 如果不是数字字符串，直接返回文字
    return value
  }

  // 如果是数字类型
  // 注意：索引从1开始，因为数据库中event_type从1开始存储
  return EVENT_TYPES[value - 1] || String(value)
}

// 根据案件状态获取进度组配置
export function getProgressGroup(status: number | string) {
  // 确保status是数字
  let statusNum: number

  // 处理字符串类型的状态值
  if (typeof status === 'string') {
    // 尝试直接转换为数字
    statusNum = Number(status)

    // 如果转换失败，检查是否是完整的状态文本并映射到对应的数字
    if (isNaN(statusNum)) {
      const statusIndex = CASE_STATUS.indexOf(status)
      statusNum = statusIndex !== -1 ? statusIndex : -1
    }
  } else {
    statusNum = status
  }

  // 根据案件状态返回不同的进度组配置
  switch (statusNum) {
    case 0:
      return {
        group: 'preparation',
        icon: 'Document',
        color: '#909399',
        description: '准备阶段（未提交立案）',
      }
    case 1:
      return {
        group: 'filing',
        icon: 'Edit',
        color: '#409EFF',
        description: '起诉阶段（提交立案待受理）',
      }
    case 2:
      return {
        group: 'pretrial',
        icon: 'DataLine',
        color: '#67C23A',
        description: '庭前阶段（立案受理未开庭）',
      }
    case 3:
      return {
        group: 'trial',
        icon: 'ChatDotRound',
        color: '#E6A23C',
        description: '审判阶段（已开庭未出判决）',
      }
    case 4:
      return {
        group: 'posttrial',
        icon: 'Files',
        color: '#F56C6C',
        description: '庭后阶段（已判决未生效）',
      }
    case 5:
      return {
        group: 'execution',
        icon: 'Operation',
        color: '#909399',
        description: '执行阶段（判决生效）',
      }
    case 6:
      return {
        group: 'completed',
        icon: 'Check',
        color: '#67C23A',
        description: '结案',
      }
    case 7:
      return {
        group: 'withdrawn',
        icon: 'Close',
        color: '#909399',
        description: '撤诉',
      }
    case 8:
      return {
        group: 'terminated',
        icon: 'CircleClose',
        color: '#F56C6C',
        description: '终止委托',
      }
    default:
      return {
        group: 'unknown',
        icon: 'HelpFilled',
        color: '#909399',
        description: '未知状态',
      }
  }
}
